/**
 * Classe de communication avec le serveur
 */
function IO(moteur) {
    this.moteur = moteur;
    
    this.buffer = [];
    this.token = "";
}

/**
 * Envoi le contenu du buffer de message au serveur
 */
IO.prototype.sendMessages = function() {
    var message = {
        token: this.token,
        actions: this.buffer
    };
    this.buffer = [];
    var json = JSON.stringify(message);
    var moteur = this.moteur;
    $.ajax({
        type: "POST",
        url: "serveur.php",
        cache: false,
        data: {actions: json},
        success: function(data) {
            pending = false;
            moteur.answerProcess(data);
        }
    });
}

/**
 * Ajoute une action au buffer d'actions
 */
IO.prototype.pushAction = function(action) {
    this.buffer.push(action);
}

/**
 * Ajoute une action de connexion au serveur au buffer
 */
IO.prototype.pushActionConnecterServeur = function(nomJoueur) {
    this.pushAction({action: "connecter_serveur", "nom_joueur": nomJoueur});
}

/**
 * Ajoute une action de récupération de la liste des parties
 */
IO.prototype.pushActionRecupListeParties = function() {
    this.pushAction({action: "recup_liste_parties"});
}

/**
 * Ajoute une action de création de partie
 */
IO.prototype.pushActionCreerPartie = function(nomPartie) {
    this.pushAction({action: "creer_partie", nom_partie: nomPartie});
}

/**
 * Ajoute une action de rejoindre une partie
 */
IO.prototype.pushActionRejoindrePartie = function(idPartie) {
    this.pushAction({action: "rejoindre_partie", id_partie: idPartie});
}

/**
 * Ajoute une action de recupération d'état partie
 */
IO.prototype.pushActionEtatPartie = function(idPartie, idEvenement) {
    this.pushAction({action: "etat_partie", id_partie: idPartie, id_evenement: idEvenement});
}

/**
 * Ajoute une action de poser une carte
 */
IO.prototype.pushActionPoserCarte = function(idCarte) {
    this.pushAction({action: "poser_carte", id_carte: idCarte});
}

/**
 * Ajoute une action qui demande le début de partie
 */
IO.prototype.pushActionCommencerPartie = function() {
    this.pushAction({action: 'commencer_partie'});
}

/**
 * Ajoute une action piocher
 */
IO.prototype.pushActionPiocher = function() {
    this.pushAction({action: 'piocher'});
}

/**
 * Ajoute une action quitter partie
 */
IO.prototype.pushActionQuitterPartie = function() {
    this.pushAction({action: 'supprimer'});
}

/**
 * Ajoute une action de choisir couleur
 */
IO.prototype.pushActionChoixCouleur = function(c) {
    this.pushAction({action: 'choix_couleur', couleur: c});
}

/**
 * Ajoute une action de dire Uno
 */
IO.prototype.pushActionUno = function() {
    this.pushAction({action: 'uno'});
}

/**
 * Ajoute une action de dire Uno
 */
IO.prototype.pushActionContreUno = function(idJoueur) {
    this.pushAction({action: 'contre_uno', numero_joueur: idJoueur});
}

/**
 * Ajoute une action de dire un message
 */
IO.prototype.pushActionMessage = function(message) {
    this.pushAction({action: 'chat', message: message});
}